@ethlete/core 5.0.0-next.65 → 5.0.0-next.67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/fesm2022/ethlete-core.mjs +148 -30
- package/fesm2022/ethlete-core.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ethlete-core.d.ts +47 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# @ethlete/core
|
|
2
2
|
|
|
3
|
+
## 5.0.0-next.67
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Keep `et-animation-leave-to` on an `AnimatedLifecycleDirective` host after its leave finishes, until the next `enter()`. An element removed a frame after its leave no longer flashes back to full opacity first.
|
|
8
|
+
|
|
9
|
+
## 5.0.0-next.66
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- `injectRouterState()` now carries the navigation `id` and `trigger` (`'imperative' | 'popstate' | 'hashchange'`).
|
|
14
|
+
- Scroll restoration can restore page state, such as a paged list's page count, before it applies the offset (`registerScrollRestorationState`), and can restore after a reload (`restore.restoreOnReload`).
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- `injectIsRouterInitialized()` is now `true` only once the first navigation has ended, so a component created during it sees `false`.
|
|
19
|
+
|
|
3
20
|
## 5.0.0-next.65
|
|
4
21
|
|
|
5
22
|
### Minor Changes
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { assertInInjectionContext, inject, DestroyRef, ElementRef, TemplateRef, InjectionToken, booleanAttribute, QueryList, RendererFactory2, RendererStyleFlags2, isSignal, DOCUMENT, signal, linkedSignal, isDevMode, computed, afterNextRender, effect, untracked, ApplicationRef, runInInjectionContext, NgZone, Injector, numberAttribute, PLATFORM_ID, afterRenderEffect, EnvironmentInjector, createComponent, ViewEncapsulation, Component, Directive, model, ViewContainerRef, input, CSP_NONCE, provideEnvironmentInitializer, output, createEnvironmentInjector, Pipe, makeEnvironmentProviders, afterEveryRender } from '@angular/core';
|
|
3
3
|
import { takeUntilDestroyed, toSignal, toObservable, outputFromObservable } from '@angular/core/rxjs-interop';
|
|
4
|
-
import { Subject, fromEvent, switchMap, startWith, of, defer, from, map, catchError, timer, takeUntil, tap, pairwise, debounceTime, merge, distinctUntilChanged, EMPTY, expand, skip, take, filter, BehaviorSubject, combineLatest, Observable,
|
|
4
|
+
import { Subject, fromEvent, switchMap, startWith, of, defer, from, map, catchError, timer, takeUntil, tap, pairwise, debounceTime, merge, distinctUntilChanged, EMPTY, expand, skip, take, filter, isObservable, ignoreElements, BehaviorSubject, combineLatest, Observable, firstValueFrom, defaultIfEmpty, concatMap, concat, finalize, exhaustMap, share, shareReplay, ReplaySubject } from 'rxjs';
|
|
5
5
|
import { FormGroup, FormArray, FormControl } from '@angular/forms';
|
|
6
6
|
import { SIGNAL, signalSetFn } from '@angular/core/primitives/signals';
|
|
7
7
|
import { isPlatformBrowser, Location, DOCUMENT as DOCUMENT$1, isPlatformServer } from '@angular/common';
|
|
8
|
-
import { Router, NavigationEnd, NavigationSkipped, NavigationStart,
|
|
8
|
+
import { Router, NavigationEnd, NavigationCancel, NavigationError, NavigationSkipped, NavigationStart, RouterLink } from '@angular/router';
|
|
9
9
|
import { Title, Meta, DomSanitizer } from '@angular/platform-browser';
|
|
10
10
|
import { platform, offset, flip, shift, limitShift, computePosition, autoUpdate, hide, arrow, size } from '@floating-ui/dom';
|
|
11
11
|
|
|
@@ -2980,16 +2980,17 @@ const injectRouterEvent = /* @__PURE__ */ memoizeSignal(() => {
|
|
|
2980
2980
|
});
|
|
2981
2981
|
/**
|
|
2982
2982
|
* Signal that indicates whether the router has been initialized.
|
|
2983
|
-
*
|
|
2984
|
-
*
|
|
2983
|
+
* It turns true once the first navigation has ended (completed, was cancelled, failed or was skipped), so a
|
|
2984
|
+
* component created while the first navigation runs still sees `false`. Injected after that point, it is `true`
|
|
2985
|
+
* right away.
|
|
2985
2986
|
*/
|
|
2986
2987
|
const injectIsRouterInitialized = /* @__PURE__ */ memoizeSignal(() => {
|
|
2987
|
-
const
|
|
2988
|
-
const
|
|
2989
|
-
return
|
|
2990
|
-
|
|
2991
|
-
|
|
2992
|
-
|
|
2988
|
+
const router = inject(Router);
|
|
2989
|
+
const firstNavigationRunning = router.currentNavigation()?.id === 1;
|
|
2990
|
+
return toSignal(router.events.pipe(filter((e) => e instanceof NavigationEnd ||
|
|
2991
|
+
e instanceof NavigationCancel ||
|
|
2992
|
+
e instanceof NavigationError ||
|
|
2993
|
+
e instanceof NavigationSkipped), map(() => true)), { initialValue: router.navigated && !firstNavigationRunning });
|
|
2993
2994
|
});
|
|
2994
2995
|
/**
|
|
2995
2996
|
* Inject the current url.
|
|
@@ -3042,12 +3043,15 @@ const createRouterState = (router) => {
|
|
|
3042
3043
|
route = route.firstChild;
|
|
3043
3044
|
}
|
|
3044
3045
|
const { data, params, queryParams, title, fragment } = route;
|
|
3046
|
+
const navigation = router.currentNavigation();
|
|
3045
3047
|
return {
|
|
3046
3048
|
data,
|
|
3047
3049
|
pathParams: params,
|
|
3048
3050
|
queryParams,
|
|
3049
3051
|
title: title ?? null,
|
|
3050
3052
|
fragment,
|
|
3053
|
+
id: navigation?.id ?? null,
|
|
3054
|
+
trigger: navigation?.trigger ?? null,
|
|
3051
3055
|
};
|
|
3052
3056
|
};
|
|
3053
3057
|
/**
|
|
@@ -3069,14 +3073,20 @@ const readUncommittedUrl = (router, location) => {
|
|
|
3069
3073
|
: window.location.pathname + window.location.search + window.location.hash;
|
|
3070
3074
|
};
|
|
3071
3075
|
/**
|
|
3072
|
-
* Inject the complete router state. This includes the current route data, path params, query params, title and fragment
|
|
3076
|
+
* Inject the complete router state. This includes the current route data, path params, query params, title and fragment,
|
|
3077
|
+
* plus the `id` and `trigger` of the current navigation (the last one once it has ended).
|
|
3073
3078
|
*/
|
|
3074
3079
|
const injectRouterState = /* @__PURE__ */ memoizeSignal(() => {
|
|
3075
3080
|
const event = injectRouterEvent();
|
|
3076
3081
|
const router = inject(Router);
|
|
3082
|
+
const lastStart = toSignal(router.events.pipe(filter((e) => e instanceof NavigationStart), map((e) => ({ id: e.id, trigger: e.navigationTrigger ?? null }))), { initialValue: null });
|
|
3077
3083
|
return computed(() => {
|
|
3078
3084
|
event();
|
|
3079
|
-
|
|
3085
|
+
const state = createRouterState(router);
|
|
3086
|
+
if (state.id !== null)
|
|
3087
|
+
return state;
|
|
3088
|
+
const start = lastStart();
|
|
3089
|
+
return { ...state, id: start?.id ?? null, trigger: start?.trigger ?? null };
|
|
3080
3090
|
}, { equal });
|
|
3081
3091
|
});
|
|
3082
3092
|
/** Inject a signal containing the current route fragment (the part after the # inside the url if present) */
|
|
@@ -3264,7 +3274,32 @@ const ET_RESTORE_SCROLL = /* @__PURE__ */ Symbol('ET_RESTORE_SCROLL');
|
|
|
3264
3274
|
const routerRestoreScroll = () => ({ [ET_RESTORE_SCROLL]: true });
|
|
3265
3275
|
const SCROLL_RESTORATION_HOLDS_DEF = /* @__PURE__ */ defineRootProvider(() => {
|
|
3266
3276
|
const holds = new Set();
|
|
3277
|
+
const states = new Set();
|
|
3267
3278
|
return {
|
|
3279
|
+
addState: (state) => {
|
|
3280
|
+
states.add(state);
|
|
3281
|
+
return () => states.delete(state);
|
|
3282
|
+
},
|
|
3283
|
+
saveStates: () => {
|
|
3284
|
+
if (!states.size)
|
|
3285
|
+
return undefined;
|
|
3286
|
+
const values = {};
|
|
3287
|
+
for (const state of states) {
|
|
3288
|
+
values[state.key] = state.save();
|
|
3289
|
+
}
|
|
3290
|
+
return values;
|
|
3291
|
+
},
|
|
3292
|
+
restoreStates: (values) => {
|
|
3293
|
+
const pending = [];
|
|
3294
|
+
for (const state of states) {
|
|
3295
|
+
if (!(state.key in values))
|
|
3296
|
+
continue;
|
|
3297
|
+
const result = state.restore(values[state.key]);
|
|
3298
|
+
if (isObservable(result))
|
|
3299
|
+
pending.push(result);
|
|
3300
|
+
}
|
|
3301
|
+
return pending;
|
|
3302
|
+
},
|
|
3268
3303
|
add: (isPending) => {
|
|
3269
3304
|
holds.add(isPending);
|
|
3270
3305
|
return () => holds.delete(isPending);
|
|
@@ -3299,12 +3334,55 @@ const holdScrollRestoration = (isPending) => {
|
|
|
3299
3334
|
const remove = injectScrollRestorationHolds().add(isPending);
|
|
3300
3335
|
inject(DestroyRef).onDestroy(remove);
|
|
3301
3336
|
};
|
|
3337
|
+
/**
|
|
3338
|
+
* Remember a piece of page state with the scroll entry, and restore it before the offset is applied -
|
|
3339
|
+
* the number of loaded pages of a paged list, for instance, without which the saved offset points at
|
|
3340
|
+
* the wrong items. Registers for the lifetime of the current injection context.
|
|
3341
|
+
*
|
|
3342
|
+
* Needs `restore.enabled` on {@link setupScrollRestoration}.
|
|
3343
|
+
*
|
|
3344
|
+
* @example
|
|
3345
|
+
* // inside a route component
|
|
3346
|
+
* registerScrollRestorationState({
|
|
3347
|
+
* key: 'pages',
|
|
3348
|
+
* save: () => pageCount(),
|
|
3349
|
+
* restore: (count) => loadPages$(count),
|
|
3350
|
+
* });
|
|
3351
|
+
*/
|
|
3352
|
+
const registerScrollRestorationState = (config) => {
|
|
3353
|
+
const remove = injectScrollRestorationHolds().addState(config);
|
|
3354
|
+
inject(DestroyRef).onDestroy(remove);
|
|
3355
|
+
};
|
|
3302
3356
|
/** Upper bound on remembered history entries. Each entry is a single number, so this is generous. */
|
|
3303
3357
|
const MAX_STORED_POSITIONS = 200;
|
|
3304
3358
|
const DEFAULT_RESTORE_TIMEOUT = 1000;
|
|
3305
3359
|
const DEFAULT_RESTORE_MAX_TIMEOUT = 10_000;
|
|
3306
3360
|
/** Events that mean the user took over scrolling, so a pending restoration must be abandoned. */
|
|
3307
3361
|
const INTERACTION_EVENTS = ['wheel', 'touchmove', 'keydown'];
|
|
3362
|
+
const RELOAD_STORAGE_KEY = 'et-scroll-restoration';
|
|
3363
|
+
const readReloadEntry = () => {
|
|
3364
|
+
try {
|
|
3365
|
+
const raw = sessionStorage.getItem(RELOAD_STORAGE_KEY);
|
|
3366
|
+
sessionStorage.removeItem(RELOAD_STORAGE_KEY);
|
|
3367
|
+
const entry = raw ? JSON.parse(raw) : null;
|
|
3368
|
+
return typeof entry?.top === 'number' && typeof entry.route === 'string' ? entry : null;
|
|
3369
|
+
}
|
|
3370
|
+
catch {
|
|
3371
|
+
return null;
|
|
3372
|
+
}
|
|
3373
|
+
};
|
|
3374
|
+
const writeReloadEntry = (entry) => {
|
|
3375
|
+
try {
|
|
3376
|
+
sessionStorage.setItem(RELOAD_STORAGE_KEY, JSON.stringify(entry));
|
|
3377
|
+
}
|
|
3378
|
+
catch {
|
|
3379
|
+
// Storage may be full or blocked (private mode); a reload then simply starts at the top.
|
|
3380
|
+
}
|
|
3381
|
+
};
|
|
3382
|
+
const isFreshNavigation = () => {
|
|
3383
|
+
const entry = performance.getEntriesByType?.('navigation')[0];
|
|
3384
|
+
return entry?.type === 'navigate';
|
|
3385
|
+
};
|
|
3308
3386
|
/** Key order is navigation order, not declaration order, so two spellings of one URL compare equal. */
|
|
3309
3387
|
const serializeQueryParams = (queryParams) => Object.keys(queryParams)
|
|
3310
3388
|
.sort()
|
|
@@ -3334,6 +3412,8 @@ const setupScrollRestoration = (config = {}) => {
|
|
|
3334
3412
|
const restoreTimeout = config.restore?.timeout ?? DEFAULT_RESTORE_TIMEOUT;
|
|
3335
3413
|
const restoreMaxTimeout = config.restore?.maxTimeout ?? DEFAULT_RESTORE_MAX_TIMEOUT;
|
|
3336
3414
|
const clampOnTimeout = config.restore?.clampOnTimeout ?? true;
|
|
3415
|
+
const restoreOnReload = restoreEnabled && config.restore?.restoreOnReload === true;
|
|
3416
|
+
let reloadEntry = restoreOnReload && !isFreshNavigation() ? readReloadEntry() : null;
|
|
3337
3417
|
const resolveScrollElement = () => {
|
|
3338
3418
|
const el = typeof config.scrollElement === 'function' ? config.scrollElement() : config.scrollElement;
|
|
3339
3419
|
return el ?? document.documentElement;
|
|
@@ -3362,11 +3442,22 @@ const setupScrollRestoration = (config = {}) => {
|
|
|
3362
3442
|
pendingRestore?.();
|
|
3363
3443
|
pendingRestore = null;
|
|
3364
3444
|
};
|
|
3365
|
-
const
|
|
3445
|
+
const captureEntry = () => ({
|
|
3446
|
+
top: resolveScrollElement().scrollTop,
|
|
3447
|
+
route: prev.route,
|
|
3448
|
+
search: serializeQueryParams(prev.state.queryParams),
|
|
3449
|
+
state: holds.saveStates(),
|
|
3450
|
+
});
|
|
3451
|
+
const scheduleRestore = (entry) => {
|
|
3366
3452
|
cancelPendingRestore();
|
|
3453
|
+
const target = entry.top;
|
|
3367
3454
|
let frame = 0;
|
|
3368
3455
|
let started = false;
|
|
3369
3456
|
let cancelled = false;
|
|
3457
|
+
let renderRef = null;
|
|
3458
|
+
let fallback;
|
|
3459
|
+
let stateSubscription = null;
|
|
3460
|
+
let stateDeadline;
|
|
3370
3461
|
// The user scrolling always wins over a restoration we have not committed yet.
|
|
3371
3462
|
const abortByUser = () => cancelPendingRestore();
|
|
3372
3463
|
const hardDeadline = Date.now() + restoreMaxTimeout;
|
|
@@ -3406,8 +3497,14 @@ const setupScrollRestoration = (config = {}) => {
|
|
|
3406
3497
|
started = true;
|
|
3407
3498
|
frame = requestAnimationFrame(step);
|
|
3408
3499
|
};
|
|
3409
|
-
const
|
|
3410
|
-
|
|
3500
|
+
const waitForRender = () => {
|
|
3501
|
+
if (cancelled)
|
|
3502
|
+
return;
|
|
3503
|
+
clearTimeout(stateDeadline);
|
|
3504
|
+
renderRef = afterNextRender({ read: start }, { injector });
|
|
3505
|
+
fallback = setTimeout(start);
|
|
3506
|
+
};
|
|
3507
|
+
const pendingStates = entry.state ? holds.restoreStates(entry.state) : [];
|
|
3411
3508
|
for (const eventName of INTERACTION_EVENTS) {
|
|
3412
3509
|
document.addEventListener(eventName, abortByUser, { capture: true, passive: true });
|
|
3413
3510
|
}
|
|
@@ -3415,7 +3512,9 @@ const setupScrollRestoration = (config = {}) => {
|
|
|
3415
3512
|
// `cancelled` is not redundant with destroying the render hook: a superseded restoration must
|
|
3416
3513
|
// not apply its (now stale) offset even if its hook had already been queued to run.
|
|
3417
3514
|
cancelled = true;
|
|
3418
|
-
renderRef
|
|
3515
|
+
renderRef?.destroy();
|
|
3516
|
+
stateSubscription?.unsubscribe();
|
|
3517
|
+
clearTimeout(stateDeadline);
|
|
3419
3518
|
if (frame)
|
|
3420
3519
|
cancelAnimationFrame(frame);
|
|
3421
3520
|
clearTimeout(fallback);
|
|
@@ -3423,13 +3522,22 @@ const setupScrollRestoration = (config = {}) => {
|
|
|
3423
3522
|
document.removeEventListener(eventName, abortByUser, { capture: true });
|
|
3424
3523
|
}
|
|
3425
3524
|
};
|
|
3525
|
+
if (pendingStates.length) {
|
|
3526
|
+
stateDeadline = setTimeout(cancelPendingRestore, restoreMaxTimeout);
|
|
3527
|
+
stateSubscription = merge(...pendingStates)
|
|
3528
|
+
.pipe(ignoreElements())
|
|
3529
|
+
.subscribe({ complete: waitForRender, error: waitForRender });
|
|
3530
|
+
}
|
|
3531
|
+
else {
|
|
3532
|
+
waitForRender();
|
|
3533
|
+
}
|
|
3426
3534
|
};
|
|
3427
3535
|
/**
|
|
3428
3536
|
* The offset the most recently left entry for this page had. A target without query params means
|
|
3429
3537
|
* "that page", whichever query state it was last in - the crumb linking to an overview does not
|
|
3430
3538
|
* know, and should not have to reproduce, the filter the user left it under.
|
|
3431
3539
|
*/
|
|
3432
|
-
const
|
|
3540
|
+
const findLastVisitedEntry = (route, search) => {
|
|
3433
3541
|
const entries = [...positions.values()];
|
|
3434
3542
|
for (let i = entries.length - 1; i >= 0; i--) {
|
|
3435
3543
|
const entry = entries[i];
|
|
@@ -3437,7 +3545,7 @@ const setupScrollRestoration = (config = {}) => {
|
|
|
3437
3545
|
continue;
|
|
3438
3546
|
if (search && entry.search !== search)
|
|
3439
3547
|
continue;
|
|
3440
|
-
return entry
|
|
3548
|
+
return entry;
|
|
3441
3549
|
}
|
|
3442
3550
|
return undefined;
|
|
3443
3551
|
};
|
|
@@ -3450,11 +3558,7 @@ const setupScrollRestoration = (config = {}) => {
|
|
|
3450
3558
|
// what `findLastVisitedOffset` walks backwards and what the cap below evicts from.
|
|
3451
3559
|
if (lastNavigationId !== null) {
|
|
3452
3560
|
positions.delete(lastNavigationId);
|
|
3453
|
-
positions.set(lastNavigationId,
|
|
3454
|
-
top: resolveScrollElement().scrollTop,
|
|
3455
|
-
route: prev.route,
|
|
3456
|
-
search: serializeQueryParams(prev.state.queryParams),
|
|
3457
|
-
});
|
|
3561
|
+
positions.set(lastNavigationId, captureEntry());
|
|
3458
3562
|
}
|
|
3459
3563
|
if (positions.size > MAX_STORED_POSITIONS) {
|
|
3460
3564
|
const oldest = positions.keys().next();
|
|
@@ -3482,7 +3586,9 @@ const setupScrollRestoration = (config = {}) => {
|
|
|
3482
3586
|
const didFragmentChange = prevState.fragment !== currState.fragment;
|
|
3483
3587
|
prev = curr;
|
|
3484
3588
|
const wasMarkedAsReturn = wantsRestore;
|
|
3589
|
+
const reloaded = reloadEntry;
|
|
3485
3590
|
wantsRestore = false;
|
|
3591
|
+
reloadEntry = null;
|
|
3486
3592
|
if (event instanceof NavigationEnd) {
|
|
3487
3593
|
lastNavigationId = event.id;
|
|
3488
3594
|
}
|
|
@@ -3496,17 +3602,24 @@ const setupScrollRestoration = (config = {}) => {
|
|
|
3496
3602
|
// The saved offset wins over both scroll to top and fragment scrolling: the user may well have
|
|
3497
3603
|
// scrolled away from the anchor before leaving the page.
|
|
3498
3604
|
if (target !== undefined) {
|
|
3499
|
-
scheduleRestore(target
|
|
3605
|
+
scheduleRestore(target);
|
|
3500
3606
|
return;
|
|
3501
3607
|
}
|
|
3502
3608
|
}
|
|
3503
3609
|
if (restoreEnabled && wasMarkedAsReturn) {
|
|
3504
|
-
const target =
|
|
3610
|
+
const target = findLastVisitedEntry(curr.route, serializeQueryParams(currState.queryParams));
|
|
3505
3611
|
if (target !== undefined) {
|
|
3506
3612
|
scheduleRestore(target);
|
|
3507
3613
|
return;
|
|
3508
3614
|
}
|
|
3509
3615
|
}
|
|
3616
|
+
if (reloaded &&
|
|
3617
|
+
event instanceof NavigationEnd &&
|
|
3618
|
+
reloaded.route === curr.route &&
|
|
3619
|
+
reloaded.search === serializeQueryParams(currState.queryParams)) {
|
|
3620
|
+
scheduleRestore(reloaded);
|
|
3621
|
+
return;
|
|
3622
|
+
}
|
|
3510
3623
|
if (sameUrlNavigation) {
|
|
3511
3624
|
const allQueryParams = [
|
|
3512
3625
|
...new Set(Object.keys(prevState.queryParams).concat(Object.keys(currState.queryParams))),
|
|
@@ -3548,8 +3661,13 @@ const setupScrollRestoration = (config = {}) => {
|
|
|
3548
3661
|
onNavigationEnd(event);
|
|
3549
3662
|
}), takeUntilDestroyed())
|
|
3550
3663
|
.subscribe();
|
|
3664
|
+
const onPageHide = () => writeReloadEntry(captureEntry());
|
|
3665
|
+
if (restoreOnReload) {
|
|
3666
|
+
window.addEventListener('pagehide', onPageHide);
|
|
3667
|
+
}
|
|
3551
3668
|
destroyRef.onDestroy(() => {
|
|
3552
3669
|
cancelPendingRestore();
|
|
3670
|
+
window.removeEventListener('pagehide', onPageHide);
|
|
3553
3671
|
if (restoreEnabled && previousScrollRestoration !== null) {
|
|
3554
3672
|
history.scrollRestoration = previousScrollRestoration;
|
|
3555
3673
|
}
|
|
@@ -4943,7 +5061,7 @@ class AnimatedLifecycleDirective {
|
|
|
4943
5061
|
}
|
|
4944
5062
|
const isInterrupting = currentState === 'leaving';
|
|
4945
5063
|
this.updateState('entering');
|
|
4946
|
-
this.
|
|
5064
|
+
this.removeClasses(ANIMATION_CLASSES.leaveDone, ANIMATION_CLASSES.leaveTo);
|
|
4947
5065
|
const previousCancel$ = this.cancelCurrentAnimation$;
|
|
4948
5066
|
this.cancelCurrentAnimation$ = new Subject();
|
|
4949
5067
|
const transitionId = `enter-${++this.transitionIdCounter}`;
|
|
@@ -5039,7 +5157,7 @@ class AnimatedLifecycleDirective {
|
|
|
5039
5157
|
transitionId,
|
|
5040
5158
|
onComplete: () => {
|
|
5041
5159
|
this.updateState('left');
|
|
5042
|
-
this.
|
|
5160
|
+
this.removeClass(ANIMATION_CLASSES.leaveActive);
|
|
5043
5161
|
this.addClass(ANIMATION_CLASSES.leaveDone);
|
|
5044
5162
|
},
|
|
5045
5163
|
cancelSignal: this.cancelCurrentAnimation$,
|
|
@@ -5054,7 +5172,7 @@ class AnimatedLifecycleDirective {
|
|
|
5054
5172
|
transitionId,
|
|
5055
5173
|
onComplete: () => {
|
|
5056
5174
|
this.updateState('left');
|
|
5057
|
-
this.
|
|
5175
|
+
this.removeClass(ANIMATION_CLASSES.leaveActive);
|
|
5058
5176
|
this.addClass(ANIMATION_CLASSES.leaveDone);
|
|
5059
5177
|
},
|
|
5060
5178
|
cancelSignal: this.cancelCurrentAnimation$,
|
|
@@ -10749,11 +10867,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
|
|
|
10749
10867
|
|
|
10750
10868
|
// Generated from package.json by tools/scripts/generate-version.js - do not edit.
|
|
10751
10869
|
/** The version of `@ethlete/core` this build was cut from. */
|
|
10752
|
-
const CORE_VERSION = '5.0.0-next.
|
|
10870
|
+
const CORE_VERSION = '5.0.0-next.67';
|
|
10753
10871
|
|
|
10754
10872
|
/**
|
|
10755
10873
|
* Generated bundle index. Do not edit.
|
|
10756
10874
|
*/
|
|
10757
10875
|
|
|
10758
|
-
export { ANIMATABLE_TOKEN, ANIMATED_IF_TOKEN, ANIMATED_LIFECYCLE_TOKEN, ANIMATION_DEBUG_STORAGE_KEY, ANIMATION_ERROR_CODES, AT_LEAST_ONE_REQUIRED, AnimatableDirective, AnimatedIfDirective, AnimatedLifecycleDirective, AutoSurfaceDirective, BOUNDARY_ELEMENT_TOKEN, BREAKPOINT_INSTANCE_TOKEN, BREAKPOINT_ORDER, COLOR_PALETTE, COLOR_PROVIDER, CORE_VERSION, ClickOutsideDirective, ColorInteractiveContainerDirective, ColorInteractiveDirective, ColorInteractiveExcludeDirective, ColorInteractiveHasFocusDirective, DEFAULT_MULTI_INSTANCE_RELS, DEFAULT_MULTI_INSTANCE_TAGS, DEFAULT_OVERLAY_LAYER, DEFAULT_VIEWPORT_CONFIG, DISABLE_LOGGER_PARAM, DragHandleDirective, ET_DISABLE_SCROLL_TOP, ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE, ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE, ET_PROPERTY_REMOVED, ET_RESTORE_SCROLL, EasingTokensStylesComponent, EthleteValidators, FOCUSABLE_SELECTOR, FOCUS_VISIBLE_TRACKER_TOKEN, HtmlToMarkdownPipe, IS_ARRAY_NOT_EMPTY, IS_EMAIL, InferMimeTypePipe, InitialsPipe, IsArrayNotEmpty, IsEmail, jsonLd as JsonLD, KeyPressManager, MARKDOWN_VERBATIM_ATTR, MUST_MATCH, MarkdownToHtmlPipe, MatchStateType, MustMatch, NOTIFICATION_CLICK_MESSAGE_TYPE, NormalizeGameResultTypePipe, NormalizeMatchParticipantsPipe, NormalizeMatchScorePipe, NormalizeMatchStatePipe, NormalizeMatchTypePipe, OVERLAY_LAYER_ATTRIBUTE, ProvideColorDirective, ProvideSurfaceDirective, RUNTIME_ERROR_NO_DATA, RepeatDirective, ResizeHandlesComponent, RestoreScrollDirective, RuntimeError, SURFACE_COLOR, SURFACE_PROVIDER, SURFACE_TYPE, SWIPE_VELOCITY_WINDOW_MS, ScrollObserverDirective, ScrollObserverEndDirective, ScrollObserverStartDirective, SlugifyPipe, StructuredDataComponent, SurfaceInteractiveDirective, ToArrayPipe, TypedQueryList, UNSAVED_CHANGES_CONFIRM, UNSAVED_CHANGES_ERROR_CODES, UNSAVED_CHANGES_TITLE_MARKER, ValidateAtLeastOneRequired, VisuallyHiddenStylesComponent, anchoredOverlayPosition, animationDebugLog, applyAlternateBinding, applyAlternateLanguagesBindings, applyArticleBindings, applyAuthorBinding, applyCanonicalBinding, applyCenteredPosition, applyDescriptionBinding, applyFaviconOverlay, applyGlobalPosition, applyHeadBinding, applyHeadTitleBinding, applyHeadTitleMarker, applyHostListener, applyHostListeners, applyInitialFocus, applyKeywordsBinding, applyLinkBinding, applyMetaBinding, applyNextBinding, applyOgBinding, applyOpenGraphBindings, applyPrevBinding, applyResourceHintsBindings, applyRobotsBinding, applySocialMediaBindings, applyStructuredDataBinding, applyTwitterCardBindings, boolBreakpointTransform, boundingClientRectToElementRect, breakpointTransformBase, buildElementSignal, buildSignalEffects, canUseSessionMemory, clamp, clone, cloneFormGroup, computedTillFalsy, computedTillTruthy, controlValueSignal, controlValueSignalWithPrevious, copyToClipboard, createAnchoredPositionCleanup, createArrayPropertyBinding, createAutoSessionMemoryKey, createCanAnimateSignal, createComponentId, createCssColorThemeName, createCssSurfaceName, createDestroy, createDocumentElementSignal, createElementDimensions, createEmptyElementSignal, createFlipAnimation, createFlipAnimationGroup, createIsRenderedSignal, createLogger, createObjectUrlHandle, createPropertyBinding, createRootThemeCss, createRoute, createRouterState, createRxHostListener, createSessionMemory, createSwatchCss, createSwipeTracker, createTailwindColorThemes, createTailwindCssVar, createTailwindRgbVar, createThemeStyle, createUnsavedChangesGuard, createUnsavedChangesTabLock, createUnsavedChangesTracker, createUserConsentProvider, deferredSignal, defineLabels, defineProvider, defineRootProvider, defineStaticProvider, defineStaticRootProvider, deleteCookie, dragGestureFrom, easeElastic, easeIn, easeInOut, easeLinear, easeOut, easeOutBack, easeOutBackStrong, elementCanScroll, enableAnchoredOverlayPositionExtras, equal, fetchDeployedBuildFingerprint$, firstElementSignal, focusElement, forceReflow, formatRuntimeError, fromNextFrame, getCookie, getDomain, getElementScrollCoordinates, getFocusableElements, getFormGroupValue, getGroupMatchPoints, getGroupMatchScore, getHeadingElement, getKnockoutMatchScore, getMatchScoreSubLine, getObjectProperty, getScrollContainerTarget, getScrollItemTarget, getScrollSnapTarget, hasAnchoredOverlayPositionExtras, hasCookie, holdScrollRestoration, htmlToMarkdown, inferMimeType, initials, injectAngularRootElement, injectAnimatedBlockSize, injectAppUpdates, injectAppUpdatesConfig, injectBoundaryElement, injectBreakpointInput, injectBreakpointIsMatched, injectBreakpointObserver, injectCanHover, injectColorPalette, injectColorScheme, injectColorThemes, injectColorThemesPrefix, injectCurrentBreakpoint, injectDefaultColorTheme, injectDefaultSurfaceTheme, injectDeviceInputType, injectDisplayOrientation, injectErrorTheme, injectFaviconStore, injectFileDownload, injectFocusVisibleTracker, injectFragment, injectHasPrecisionInput, injectHasTouchInput, injectHostElement, injectIs2Xl, injectIsDocumentVisible, injectIsLandscape, injectIsLg, injectIsMd, injectIsPortrait, injectIsRouterInitialized, injectIsSm, injectIsXl, injectIsXs, injectLinkStore, injectLinkStoreConfig, injectLocale, injectMediaQueryIsMatched, injectMetaConfig, injectMetaStore, injectNotifications, injectObserveBreakpoint, injectObserveMediaQuery, injectOverlayRuntime, injectParentSurface, injectPathParam, injectPathParamChanges, injectPathParams, injectPrefersReducedMotion, injectQueryParam, injectQueryParamAll, injectQueryParamChanges, injectQueryParams, injectRenderer, injectRootSurfaceTheme, injectRoute, injectRouteData, injectRouteDataItem, injectRouteTitle, injectRouterEvent, injectRouterNavigationState, injectRouterState, injectScrollbarDimensions, injectSemanticColorTheme, injectStructuredDataConfig, injectStructuredDataStore, injectStyleManager, injectSuccessTheme, injectSurfaceColorPalette, injectSurfaceContextTracker, injectSurfaceThemes, injectSurfaceThemesPrefix, injectSurfaceType, injectTemplateRef, injectTitleConfig, injectTitleStore, injectUnsavedChangesCoordinator, injectUrl, injectViewportConfig, injectViewportDimensions, injectViewportSize, injectWarningTheme, isAnimationDebugEnabled, isArray, isElement, isElementSignal, isElementVisible, isFocusable, isGroupMatch, isHTMLElement, isHTMLOrSVGElement, isKnockoutMatch, isObject, isOnHigherOverlayLayer, isSafeLinkUrl, isSafeUrl, isStaleBuildError, markdownToHtml, matchesReducedMotion, maybeSignalValue, memoizeSignal, mountEasingTokens, mountVisuallyHidden, nextFrame, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, normalizeUnsavedChangesSource, numberBreakpointTransform, onOverlayViewportInsetsChange, optionalBooleanAttribute, overlayViewportInsets, overlayViewportInsetsFor, ownsActiveElement, previousSignalValue, provideAppUpdates, provideAppUpdatesConfig, provideAppUpdatesInstance, provideBoundaryElement, provideBreakpointInstance, provideBreakpointObserver, provideColorPalette, provideColorScheme, provideColorThemes, provideColorThemesWithTailwind4, provideFaviconStore, provideFocusVisibleTracker, provideLinkStore, provideLinkStoreConfig, provideLocale, provideMetaConfig, provideMetaStore, provideNotifications, provideOverlayRuntime, provideRenderer, provideStructuredDataConfig, provideStructuredDataStore, provideStyleManager, provideSurfaceContextTracker, provideSurfaceThemesWithTailwind4, provideTitleConfig, provideTitleStore, provideUnsavedChangesConfirm, provideUnsavedChangesCoordinator, provideViewportConfig, randomId, readBuildFingerprint, readFromClipboard, reserveOverlayViewportSpace, resolveAppRootColorProvider, resolveColorThemeVariant, resolveOverlayLayer, resolveSurfaceByElevation, round, routerDisableScrollTop, routerRestoreScroll, scrollToElement, setCookie, setInputSignal, setupFocusTrap, setupPositioning, setupScrollRestoration, signalAnimatedNumber, signalAttributes, signalClasses, signalCountdown, signalDeferredLoading, signalElementChildren, signalElementDimensions, signalElementIntersection, signalElementLastScrollDirection, signalElementMutations, signalElementScrollState, signalHostAttributes, signalHostClasses, signalHostElementDimensions, signalHostElementIntersection, signalHostElementLastScrollDirection, signalHostElementMutations, signalHostElementScrollState, signalHostStyles, signalIsRendered, signalStyles, slugify, suppressTextSelection, switchQueryListChanges, syncSignal, toArray, toArrayTrackByFn, toInjectFn, toProvideFn, toStringBinding, toToken, transformOrReturn, typedBreakpointTransform, useCursorDragScroll, writeScrollbarSizeToCssVariables, writeViewportSizeToCssVariables, ɵProvideColorThemes, ɵProvideColorThemesPrefix, ɵProvideSurfaceThemes, ɵProvideSurfaceThemesPrefix };
|
|
10876
|
+
export { ANIMATABLE_TOKEN, ANIMATED_IF_TOKEN, ANIMATED_LIFECYCLE_TOKEN, ANIMATION_DEBUG_STORAGE_KEY, ANIMATION_ERROR_CODES, AT_LEAST_ONE_REQUIRED, AnimatableDirective, AnimatedIfDirective, AnimatedLifecycleDirective, AutoSurfaceDirective, BOUNDARY_ELEMENT_TOKEN, BREAKPOINT_INSTANCE_TOKEN, BREAKPOINT_ORDER, COLOR_PALETTE, COLOR_PROVIDER, CORE_VERSION, ClickOutsideDirective, ColorInteractiveContainerDirective, ColorInteractiveDirective, ColorInteractiveExcludeDirective, ColorInteractiveHasFocusDirective, DEFAULT_MULTI_INSTANCE_RELS, DEFAULT_MULTI_INSTANCE_TAGS, DEFAULT_OVERLAY_LAYER, DEFAULT_VIEWPORT_CONFIG, DISABLE_LOGGER_PARAM, DragHandleDirective, ET_DISABLE_SCROLL_TOP, ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE, ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE, ET_PROPERTY_REMOVED, ET_RESTORE_SCROLL, EasingTokensStylesComponent, EthleteValidators, FOCUSABLE_SELECTOR, FOCUS_VISIBLE_TRACKER_TOKEN, HtmlToMarkdownPipe, IS_ARRAY_NOT_EMPTY, IS_EMAIL, InferMimeTypePipe, InitialsPipe, IsArrayNotEmpty, IsEmail, jsonLd as JsonLD, KeyPressManager, MARKDOWN_VERBATIM_ATTR, MUST_MATCH, MarkdownToHtmlPipe, MatchStateType, MustMatch, NOTIFICATION_CLICK_MESSAGE_TYPE, NormalizeGameResultTypePipe, NormalizeMatchParticipantsPipe, NormalizeMatchScorePipe, NormalizeMatchStatePipe, NormalizeMatchTypePipe, OVERLAY_LAYER_ATTRIBUTE, ProvideColorDirective, ProvideSurfaceDirective, RUNTIME_ERROR_NO_DATA, RepeatDirective, ResizeHandlesComponent, RestoreScrollDirective, RuntimeError, SURFACE_COLOR, SURFACE_PROVIDER, SURFACE_TYPE, SWIPE_VELOCITY_WINDOW_MS, ScrollObserverDirective, ScrollObserverEndDirective, ScrollObserverStartDirective, SlugifyPipe, StructuredDataComponent, SurfaceInteractiveDirective, ToArrayPipe, TypedQueryList, UNSAVED_CHANGES_CONFIRM, UNSAVED_CHANGES_ERROR_CODES, UNSAVED_CHANGES_TITLE_MARKER, ValidateAtLeastOneRequired, VisuallyHiddenStylesComponent, anchoredOverlayPosition, animationDebugLog, applyAlternateBinding, applyAlternateLanguagesBindings, applyArticleBindings, applyAuthorBinding, applyCanonicalBinding, applyCenteredPosition, applyDescriptionBinding, applyFaviconOverlay, applyGlobalPosition, applyHeadBinding, applyHeadTitleBinding, applyHeadTitleMarker, applyHostListener, applyHostListeners, applyInitialFocus, applyKeywordsBinding, applyLinkBinding, applyMetaBinding, applyNextBinding, applyOgBinding, applyOpenGraphBindings, applyPrevBinding, applyResourceHintsBindings, applyRobotsBinding, applySocialMediaBindings, applyStructuredDataBinding, applyTwitterCardBindings, boolBreakpointTransform, boundingClientRectToElementRect, breakpointTransformBase, buildElementSignal, buildSignalEffects, canUseSessionMemory, clamp, clone, cloneFormGroup, computedTillFalsy, computedTillTruthy, controlValueSignal, controlValueSignalWithPrevious, copyToClipboard, createAnchoredPositionCleanup, createArrayPropertyBinding, createAutoSessionMemoryKey, createCanAnimateSignal, createComponentId, createCssColorThemeName, createCssSurfaceName, createDestroy, createDocumentElementSignal, createElementDimensions, createEmptyElementSignal, createFlipAnimation, createFlipAnimationGroup, createIsRenderedSignal, createLogger, createObjectUrlHandle, createPropertyBinding, createRootThemeCss, createRoute, createRouterState, createRxHostListener, createSessionMemory, createSwatchCss, createSwipeTracker, createTailwindColorThemes, createTailwindCssVar, createTailwindRgbVar, createThemeStyle, createUnsavedChangesGuard, createUnsavedChangesTabLock, createUnsavedChangesTracker, createUserConsentProvider, deferredSignal, defineLabels, defineProvider, defineRootProvider, defineStaticProvider, defineStaticRootProvider, deleteCookie, dragGestureFrom, easeElastic, easeIn, easeInOut, easeLinear, easeOut, easeOutBack, easeOutBackStrong, elementCanScroll, enableAnchoredOverlayPositionExtras, equal, fetchDeployedBuildFingerprint$, firstElementSignal, focusElement, forceReflow, formatRuntimeError, fromNextFrame, getCookie, getDomain, getElementScrollCoordinates, getFocusableElements, getFormGroupValue, getGroupMatchPoints, getGroupMatchScore, getHeadingElement, getKnockoutMatchScore, getMatchScoreSubLine, getObjectProperty, getScrollContainerTarget, getScrollItemTarget, getScrollSnapTarget, hasAnchoredOverlayPositionExtras, hasCookie, holdScrollRestoration, htmlToMarkdown, inferMimeType, initials, injectAngularRootElement, injectAnimatedBlockSize, injectAppUpdates, injectAppUpdatesConfig, injectBoundaryElement, injectBreakpointInput, injectBreakpointIsMatched, injectBreakpointObserver, injectCanHover, injectColorPalette, injectColorScheme, injectColorThemes, injectColorThemesPrefix, injectCurrentBreakpoint, injectDefaultColorTheme, injectDefaultSurfaceTheme, injectDeviceInputType, injectDisplayOrientation, injectErrorTheme, injectFaviconStore, injectFileDownload, injectFocusVisibleTracker, injectFragment, injectHasPrecisionInput, injectHasTouchInput, injectHostElement, injectIs2Xl, injectIsDocumentVisible, injectIsLandscape, injectIsLg, injectIsMd, injectIsPortrait, injectIsRouterInitialized, injectIsSm, injectIsXl, injectIsXs, injectLinkStore, injectLinkStoreConfig, injectLocale, injectMediaQueryIsMatched, injectMetaConfig, injectMetaStore, injectNotifications, injectObserveBreakpoint, injectObserveMediaQuery, injectOverlayRuntime, injectParentSurface, injectPathParam, injectPathParamChanges, injectPathParams, injectPrefersReducedMotion, injectQueryParam, injectQueryParamAll, injectQueryParamChanges, injectQueryParams, injectRenderer, injectRootSurfaceTheme, injectRoute, injectRouteData, injectRouteDataItem, injectRouteTitle, injectRouterEvent, injectRouterNavigationState, injectRouterState, injectScrollbarDimensions, injectSemanticColorTheme, injectStructuredDataConfig, injectStructuredDataStore, injectStyleManager, injectSuccessTheme, injectSurfaceColorPalette, injectSurfaceContextTracker, injectSurfaceThemes, injectSurfaceThemesPrefix, injectSurfaceType, injectTemplateRef, injectTitleConfig, injectTitleStore, injectUnsavedChangesCoordinator, injectUrl, injectViewportConfig, injectViewportDimensions, injectViewportSize, injectWarningTheme, isAnimationDebugEnabled, isArray, isElement, isElementSignal, isElementVisible, isFocusable, isGroupMatch, isHTMLElement, isHTMLOrSVGElement, isKnockoutMatch, isObject, isOnHigherOverlayLayer, isSafeLinkUrl, isSafeUrl, isStaleBuildError, markdownToHtml, matchesReducedMotion, maybeSignalValue, memoizeSignal, mountEasingTokens, mountVisuallyHidden, nextFrame, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, normalizeUnsavedChangesSource, numberBreakpointTransform, onOverlayViewportInsetsChange, optionalBooleanAttribute, overlayViewportInsets, overlayViewportInsetsFor, ownsActiveElement, previousSignalValue, provideAppUpdates, provideAppUpdatesConfig, provideAppUpdatesInstance, provideBoundaryElement, provideBreakpointInstance, provideBreakpointObserver, provideColorPalette, provideColorScheme, provideColorThemes, provideColorThemesWithTailwind4, provideFaviconStore, provideFocusVisibleTracker, provideLinkStore, provideLinkStoreConfig, provideLocale, provideMetaConfig, provideMetaStore, provideNotifications, provideOverlayRuntime, provideRenderer, provideStructuredDataConfig, provideStructuredDataStore, provideStyleManager, provideSurfaceContextTracker, provideSurfaceThemesWithTailwind4, provideTitleConfig, provideTitleStore, provideUnsavedChangesConfirm, provideUnsavedChangesCoordinator, provideViewportConfig, randomId, readBuildFingerprint, readFromClipboard, registerScrollRestorationState, reserveOverlayViewportSpace, resolveAppRootColorProvider, resolveColorThemeVariant, resolveOverlayLayer, resolveSurfaceByElevation, round, routerDisableScrollTop, routerRestoreScroll, scrollToElement, setCookie, setInputSignal, setupFocusTrap, setupPositioning, setupScrollRestoration, signalAnimatedNumber, signalAttributes, signalClasses, signalCountdown, signalDeferredLoading, signalElementChildren, signalElementDimensions, signalElementIntersection, signalElementLastScrollDirection, signalElementMutations, signalElementScrollState, signalHostAttributes, signalHostClasses, signalHostElementDimensions, signalHostElementIntersection, signalHostElementLastScrollDirection, signalHostElementMutations, signalHostElementScrollState, signalHostStyles, signalIsRendered, signalStyles, slugify, suppressTextSelection, switchQueryListChanges, syncSignal, toArray, toArrayTrackByFn, toInjectFn, toProvideFn, toStringBinding, toToken, transformOrReturn, typedBreakpointTransform, useCursorDragScroll, writeScrollbarSizeToCssVariables, writeViewportSizeToCssVariables, ɵProvideColorThemes, ɵProvideColorThemesPrefix, ɵProvideSurfaceThemes, ɵProvideSurfaceThemesPrefix };
|
|
10759
10877
|
//# sourceMappingURL=ethlete-core.mjs.map
|